package com.tjn.wrapper_;

/**
 * @author 陶镓妮
 * @version 1.0
 */
public class WrapperExercise {
    public static void main(String[] args) {

        /*
        valueOf()源代码
        public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
        看这段代码可知，如果i在-128~127之间，那么会使用缓存中的对象，不会创建新的对象
        如果i不在-128~127之间，那么会创建新的对象
         */

        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);//i和j是两个对象

        Integer m = 1;//其实底层调用的还是valueOf()方法，1在-128~127之间，会从缓存中获取对象
        Integer n = 1;
        System.out.println(m == n);//所以从缓存中获取的对象是同一个对象

        Integer x = 128;//128不在-128~127之间，会创建新的对象
        Integer y = 128;
        System.out.println(x == y);//所以会创建新的对象，所以不是同一个对象

        Integer a = 128;
        int b = 128;
        System.out.println(a == b);//只要有一个是基本数据类型，那么判断的是值是否相同

        Integer c = 127;
        Integer d = 127;
        System.out.println(c == d);//只要有一个是基本数据类型，那么判断的是值是否相同
    }
}
